\chapter{XML}
\section{Introducci\'on}
Por lo general la mayor\'ia de las personas en promedio han tenido alg\'un contacto con las computadoras e Internet, esto quiere decir que han tenido contacto con la manipulaci\'on del Web que cuenta con uno de los principales recursos disponibles en Internet que son las p\'aginas HTML (Hypertext Markup Language). Estas p\'aginas est\'an construidas principalmente por instrucciones llamadas etiquetas (tags) que son las encargadas de describir la estructura, dise\~no y presentaci\'on del contenido que se muestra en una p\'agina Web.\\

El lenguaje HTML nos sirve para comprender mejor el significado de XML, podemos decir que una p\'agina desarrollada con el lenguaje HTML es un conjunto de etiquetas que encierran y separan cada uno de los elementos que conforman una p\'agina Web. Por ejemplo: Para crear una p\'agina debemos tener algunas etiquetas principales que nos separan cada uno de las partes que conforman a una p\'agina HTML.\\

\begin{table}[!htp]
\noindent
\ttfamily
\hlstd{\hlline{\ \ \ \ 1\ } }\hlkwa{$<$html$>$}\hlstd{\\
\hlline{\ \ \ \ 2\ }}\hlstd{\ \ \ }\hlstd{}\hlkwa{$<$head$>$}\hlstd{\\
\hlline{\ \ \ \ 3\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$title$>$}\hlstd{\\
\hlline{\ \ \ \ 4\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{Ejemplo P\'agina HTML\\
\hlline{\ \ \ \ 5\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/title$>$}\hlstd{\\
\hlline{\ \ \ \ 6\ }}\hlstd{\ \ \ }\hlstd{}\hlkwa{$<$/head$>$}\hlstd{\\
\hlline{\ \ \ \ 7\ }}\hlstd{\ \ \ }\hlstd{}\hlkwa{$<$body$>$}\hlstd{\\
\hlline{\ \ \ \ 8\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$p$>$}\hlstd{\\
\hlline{\ \ \ \ 9\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{Ejemplo HTML\\
\hlline{\ \ \ 10\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/p$>$}\hlstd{\\
\hlline{\ \ \ 11\ }}\hlstd{\ \ \ }\hlstd{}\hlkwa{$<$/body$>$}\hlstd{\\
\hlline{\ \ \ 12\ } }\hlkwa{$<$/html$>$}\hlstd{}\\
\mbox{}
\normalfont
\label{HTML}
\caption{Ejemplo de c\'odigo HTML}
\end{table}

En el c\'odigo \ref{HTML} podemos ver como cada uno de los elementos principales que conforman a una p\'agina HTML est\'an encerrado por las etiquetas caracter\'isticas de HTML, esto nos permite separar y saber que tipo de etiquetas deben de ir dentro de otras, para formar una estructura anidada de etiquetas.\\

Una vez que hemos definido la estructura de una p\'agina HTML, podemos decir que HTML es un documento XML pero con restricciones, un documento XML al igual que HTML esta conformado por etiquetas pero estas etiquetas no deben de tener un l\'exico restringido como lo tiene HTML. Es decir, mientras la p\'agina HTML debe de tener estrictamente las etiquetas de \hlkwa{$<$html$>$}, \hlkwa{$<$/html$>$}, \hlkwa{$<$head$>$}, \hlkwa{$<$/head$>$}, \hlkwa{$<$body$>$}, \hlkwa{$<$/body$>$}, etc. en XML se pueden definir las etiquetas que mejor especifiquen el contenido \hlkwa{$<$documentoWEB$>$}, \hlkwa{$<$/documentoWEB$>$}, \hlkwa{$<$principal$>$}, \hlkwa{$<$/principal$>$}, \hlkwa{$<$contenido$>$}, \hlkwa{$<$/contenido$>$}, etc.\\

\begin{table}[!htp]
 \noindent
\ttfamily
\hlstd{}\hlline{\ \ \ \ 1\ }\hlkwa{$<$html$>$}\hlstd{\\
\hlline{\ \ \ \ 2\ }}\hlstd{\ \ \ }\hlstd{}\hlkwa{$<$head$>$}\hlstd{\\
\hlline{\ \ \ \ 3\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$title$>$}\hlstd{\\
\hlline{\ \ \ \ 4\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{Ejemplo P\'agina HTML\\
\hlline{\ \ \ \ 5\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/title$>$}\hlstd{\\
\hlline{\ \ \ \ 6\ }}\hlstd{\ \ \ }\hlstd{}\hlkwa{$<$/head$>$}\hlstd{\\
\hlline{\ \ \ \ 7\ }}\hlstd{\ \ \ }\hlstd{}\hlkwa{$<$body$>$}\hlstd{\\
\hlline{\ \ \ \ 8\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$p$>$}\hlstd{\\
\hlline{\ \ \ \ 9\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{Ejemplo HTML\\
\hlline{\ \ \ 10\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/p$>$}\hlstd{\\
\hlline{\ \ \ 11\ }}\hlstd{\ \ \ }\hlstd{}\hlkwa{$<$/body$>$}\hlstd{}\\
\hlline{\ \ \ 12\ }\hlkwa{$<$/html$>$}\hlstd{}\\
\hlline{\ \ \ \ }\\
\hlline{\ \ \ \ }\\
\hlline{\ \ \ 13\ }\hlkwa{$<$documentoWEB$>$}\hlstd{\\
\hlline{\ \ \ 14\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$principal$>$}\hlstd{\\
\hlline{\ \ \ 15\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$titulo$>$}\hlstd{\\
\hlline{\ \ \ 16\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{Ejemplo Documento XML\\
\hlline{\ \ \ 17\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/titulo$>$}\hlstd{\\
\hlline{\ \ \ 18\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$/principal$>$}\hlstd{\\
\hlline{\ \ \ 19\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$contenido$>$}\hlstd{\\
\hlline{\ \ \ 20\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$parrafo$>$}\hlstd{\\
\hlline{\ \ \ 21\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{Ejemplo XML\\
\hlline{\ \ \ 22\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/parrafo$>$}\hlstd{\\
\hlline{\ \ \ 23\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$/contenido$>$}\hlstd{}\\
\hlline{\ \ \ 24\ }\hlkwa{$<$/documentoWEB$>$}\hlstd{}\\
\mbox{}
\normalfont
\label{XMLvsHTML}
\caption {Comparaci\'on entre una p\'agina HTML y un documento XML}
\end{table}

Este ejemplo solo es una analog\'ia para poder entender mejor el concepto principal de XML, ya que un navegador Web no es capaz de interpretar nuestro documento XML para mostrarlo como una p\'agina HTML. Por lo tanto XML no es un lenguaje que nos ayude a mejorar las p\'aginas Web, sino que es un lenguaje que describe el tipo de  informaci\'on que se maneja en un documento.\\

\section{Definici\'on de XML}
El nombre de XML se conforma de las sigla en ingl\'es de Extensible Markup Language (lenguaje de marcas extensible), al igual que HTML es un lenguaje basado en marcas pero a diferencia de HTML es considerado un metalenguaje ya que es una forma de especificar lenguajes. Fue desarrollado por el World Wide Web Consortium (W3C) adaptando y simplificando el lenguaje SGML. Por lo tanto XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades.\\

\section{Antecedentes de XML}
En los a\~nos 70 la empresa IBM invento un lenguaje llamado GML (Generalized Markup Language), que surgi\'o por la necesidad de almacenar grandes cantidades de informaci\'on ordenadamente y con capacidad de interoperabilidad entre las aplicaciones. Este lenguaje gust\'o a la ISO, por lo que en 1986 trabajaron para normalizarlo, creando SGML (Standard Generalized Markup Language), capaz de adaptarse a un gran numero de aplicaciones y entornos de desarrollo. A partir de \'el se han creado otros sistemas para almacenar informaci\'on de los cuales el m\'as destacado ha sido la creaci\'on del lenguaje XML.\\

En el a\~no 1989 Tim Berners Lee cre\'o la Web, y junto con ella el lenguaje HTML. La especificaci\'on de este lenguaje se defini\'o con ayuda del lenguaje SGML para que fuera un formato apegado a un est\'andar. Debido a esto fue adoptado r\'apidamente por la comunidad y diversas organizaciones creando sus propios visores de HTML (navegadores Web). Esto provoco una ri\~na entre ellos por crear el visor HTML mas avanzado creando sus propias etiquetas, definiciones e instrucciones provocando un crecimiento descontrolado del lenguaje HTML.\\

El W3C en 1998 empez\'o el desarrollo de XML con la mentalidad de solucionar las carencias y defectos que tiene el lenguaje HTML como por ejemplo:

\begin{itemize}
 	\item En HTML se mezcla el contenido con los estilos  que se aplican al texto y a la propia p\'agina.
	\item No permite la interoperabilidad entre las aplicaciones para el intercambio de informaci\'on.
	\item La presentaci\'on de la informaci\'on de una p\'agina Web depende del navegador utilizado.
\end{itemize}

Para hacer esto XML deja de lado muchas caracter\'isticas de SGML que estaban pensadas para facilitar la escritura manual de documentos. XML en cambio est\'a orientado a hacer las cosas m\'as sencillas para los programas autom\'aticos que necesiten interpretar el documento.

\section{Enfoque de XML}
Hoy en d\'ia existen diferentes paradigmas de programaci\'on como lo puede ser la programaci\'on estructurada o la programaci\'on orientada a objetos. XML es un lenguaje que propone la programaci\'on basada en documentos, es decir que un programa que recibe entradas y produce salidas, se puede cambiar a una arquitectura en donde se recibe un documento y como salida se produce otro documento que es est\'andar para que otras aplicaciones puedan utilizarlo y recibirlo como entrada.
Como se ha mencionado una de los principales objetivos que se tiene en mente al utilizar XML es lograr la estandarizaci\'on del intercambio de informaci\'on, hoy en d\'ia la mayor\'ia de las aplicaciones tienen el problema de no poder intercambiar informaci\'on, esto es debido a que cada una de ellas tiene una manera propia de recibir datos y producir resultados. Este problema se puede solucionar utilizando documentos XML para intercambiar informaci\'on.

\section{Estructura de un documento XML}
La tecnolog\'ia XML busca dar soluci\'on al problema de expresar informaci\'on estructurada de la manera m\'as abstracta y reutilizable posible. Que la informaci\'on sea estructurada quiere decir que se compone de partes bien definidas, y que esas partes se componen a su vez de otras partes. Con una estructura correctamente planteada se puede obtener un \'arbol bien definido con la estructura de las partes que conforman al documento. Estas partes se llaman elementos, y en XML se definen mediante etiquetas.\\

\begin{table}[!htp]
 \noindent
\ttfamily
\hlstd{}\hlline{\ \ \ \ 1\ }\hlkwa{$<$curriculum$>$}\hlstd{\\
\hlline{\ \ \ \ 2\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$datosgenerales$>$}\hlstd{\\
\hlline{\ \ \ \ 3\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$nombre$>$}\hlstd{\\
\hlline{\ \ \ \ 4\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$apellidop$>$}\hlstd{ Perez }\hlkwa{$<$/apellidop$>$}\hlstd{\\
\hlline{\ \ \ \ 5\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$apellidom$>$}\hlstd{}\hlstd{\ \ \ \ }\hlstd{Hernandez }\hlkwa{$<$/apellidom$>$}\hlstd{\\
\hlline{\ \ \ \ 6\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$nombres$>$}\hlstd{ Juan Carlos }\hlkwa{$<$/nombres$>$}\hlstd{\\
\hlline{\ \ \ \ 7\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/nombre$>$}\hlstd{\\
\hlline{\ \ \ \ 8\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$fechanac$>$}\hlstd{\\
\hlline{\ \ \ \ 9\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$dia$>$}\hlstd{}\hlnum{31}\hlstd{}\hlkwa{$<$/dia$>$}\hlstd{\\
\hlline{\ \ \ 10\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$mes$>$}\hlstd{}\hlnum{01}\hlstd{}\hlkwa{$<$/mes$>$}\hlstd{\\
\hlline{\ \ \ 11\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$anio$>$}\hlstd{}\hlnum{1985}\hlstd{}\hlkwa{$<$/anio$>$}\hlstd{\\
\hlline{\ \ \ 12\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/fechanac$>$}\hlstd{\\
\hlline{\ \ \ 13\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$/datosgenerales$>$}\hlstd{}\\
\hlline{\ \ \ 14\ }\hlkwa{$<$/curriculum$>$}\hlstd{}\\
\mbox{}
\normalfont
\caption{Ejemplo de la estructura de un documento XML}
\label{ejemplo3XML}
\end{table}

\begin{figure}[ht]
\begin{center}
\includegraphics[width=300pt]{./EstructuraXML.jpg}
\caption{Estructura de \'arbol que se genera a partir del documento XML}
\end{center}
\end{figure}

Si observamos el diagrama de la figura 2.2 cada uno de los elementos que se presentan es una parte del documento, cada uno de estos elementos esta representado por un par de etiquetas en la figura 2.1. Una etiqueta consiste en una marca hecha para separar los elementos que se encuentran en el documento editado. Podemos definir cada elemento como un pedazo de informaci\'on con un sentido claro y definido.\\

Las etiquetas tienen la forma \hlkwa{$<$nombre$>$} correspondencia \hlkwa{$</$nombre$>$}, donde nombre es el nombre del elemento que se est\'a se\~nalando y correspondencia es la informaci\'on que estar\'a delimitada por las etiquetas. Las etiquetas pueden estar anidadas, pero toda etiqueta que se abra (\hlkwa{$<$nombre$>$}) debe de tener correspondencia con una etiqueta de cierre (\hlkwa{$</$nombre$>$}) respetando el orden jer\'arquico.


\section{Documentos XML bien formados}
Cuando un documento XML cumple con todas las definiciones b\'asicas de formato se dice que es un documento bien formado. Un documento bien formado es el que no tienen errores l\'exicos en lenguaje definido de XML y por lo tanto puede analizarse sintacticamente con un parser que cumpla con la sintaxis del est\'andar XML. Un documento XML puede cumplir con el requisito de ser bien formado, sin embargo existe otro requisito que debe de cumplir llamado validez del documento que se explica posteriormente.\\

Todos los documentos XML deben de cumplir como requisito m\'inimo que est\'en bien formados esto quiere decir que deben de cumplir lo siguiente:

\begin{itemize}
 \item En algunas ocasiones no se utiliza DTD (Document Type Definition), en este caso el documento debe comenzar con una Declaraci\'on de Documento Standalone.
	\begin{itemize}
		\item \hlkwa{$<?$xml version=''1.0'' encoding='iso-8859-1' $?>$}
	\end{itemize}
\item Los documentos XML solo pueden tener un elemento ra\'iz del que todos los dem\'as sean parte.

\item Todas las etiquetas deben estar equilibradas: Esto significa que todos los elementos que contengan datos de tipo car\'acter deben tener etiqueta de apertura y de cierre \hlkwa{$<$nombre$></$nombre$>$}.
\begin{itemize}
 \item \hlkwa{$<$apellidop$>$ Perez $</$apellidop$>$}
\end{itemize}

\item Las etiquetas deben de estar correctamente anidadas dentro de otras respetando el orden de las etiquetas.

\item En las etiquetas se pueden definir atributos, todos los valores de los atributos deben ir entrecomillados ya sea entre comillas simples o dobles.
\begin{itemize}
 \item \hlkwa{$<$nombre='nombres'$>$}
\end{itemize}

\item Pueden existir elementos vac\'ios, esto es, que pueden tener etiqueta de apertura pero no de cierre. Esto es posible pero la etiqueta se de be de terminar con: \hlkwa{$'/>'$}.

\item Si, dentro de una etiqueta existe la necesidad de poner un s\'imbolo como (<, >, \&) debe de colocarse como \&lt, \&amp, \&gt respectivamente.

\end{itemize}

Los nombres de las etiquetas pueden ser alfanum\'ericos, comenzando con una letra.

\begin{table}[!htp]
\noindent
\ttfamily
\hlstd{}\hlline{\ \ \ \ 1\ }\hlkwa{$<$?xml version$=$}\hlstr{''1.0''}\hlkwa{ encoding$=$'iso{-}}\hlnum{8859}\hlkwa{{-}}\hlnum{1}\hlkwa{' ?$>$}\hlstd{}\\
\hlline{\ \ \ \ 2\ }\hlkwa{$<$curriculum$>$}\hlstd{\\
\hlline{\ \ \ \ 3\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$datosgenerales$>$}\hlstd{\\
\hlline{\ \ \ \ 4\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$nombre$>$}\hlstd{\\
\hlline{\ \ \ \ 5\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$apellidop$>$}\hlstd{ Perez }\hlkwa{$<$/apellidop$>$}\hlstd{\\
\hlline{\ \ \ \ 6\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$apellidom$>$}\hlstd{}\hlstd{\ \ \ \ }\hlstd{Hernandez }\hlkwa{$<$/apellidom$>$}\hlstd{\\
\hlline{\ \ \ \ 7\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$nombres$>$}\hlstd{ Juan Carlos }\hlkwa{$<$/nombres$>$}\hlstd{\\
\hlline{\ \ \ \ 8\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/nombre$>$}\hlstd{\\
\hlline{\ \ \ \ 9\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$fechanac$>$}\hlstd{\\
\hlline{\ \ \ 10\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$dia$>$}\hlstd{}\hlnum{31}\hlstd{}\hlkwa{$<$/dia$>$}\hlstd{\\
\hlline{\ \ \ 11\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$mes$>$}\hlstd{}\hlnum{01}\hlstd{}\hlkwa{$<$/mes$>$}\hlstd{\\
\hlline{\ \ \ 12\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$anio$>$}\hlstd{}\hlnum{1985}\hlstd{}\hlkwa{$<$/anio$>$}\hlstd{\\
\hlline{\ \ \ 13\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/fechanac$>$}\hlstd{\\
\hlline{\ \ \ 14\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$/datosgenerales$>$}\hlstd{\\
\hlline{\ \ \ 15\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$documentacion$>$}\hlstd{\\
\hlline{\ \ \ 16\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$rfc$>$}\hlstd{peh850131}\hlkwa{$<$/rfc$>$}\hlstd{\\
\hlline{\ \ \ 17\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$afilIMSS$>$}\hlstd{}\hlnum{4645648}\hlstd{}\hlkwa{$<$/afilIMSS$>$}\hlstd{\\
\hlline{\ \ \ 18\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$pasaporte$>$}\hlstd{}\hlnum{98789}\hlstd{}\hlkwa{$<$/pasaporte$>$}\hlstd{\\
\hlline{\ \ \ 19\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$licenciaM$>$}\hlstd{\\
\hlline{\ \ \ 20\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$licencia$>$}\hlstd{si}\hlkwa{$<$/licencia$>$}\hlstd{\\
\hlline{\ \ \ 21\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$clase$>$}\hlstd{B}\hlkwa{$<$/clase$>$}\hlstd{\\
\hlline{\ \ \ 22\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$numero$>$}\hlstd{}\hlnum{567575}\hlstd{}\hlkwa{$<$/numero$>$}\hlstd{\\
\hlline{\ \ \ 23\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/licenciaM$>$}\hlstd{\\
\hlline{\ \ \ 24\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$/documentacion$>$}\hlstd{}\\
\hlline{\ \ \ 25\ }\hlkwa{$<$/curriculum$>$}\hlstd{}\\
\mbox{}
\normalfont
\caption {Ejemplo de un documento XML bien formado.}
\label{ejemploXML}
\end{table}

\section{Partes de un documento XML}
Un documento XML est\'a formado por el pr\'ologo y por el cuerpo del documento.

\subsection{Pr\'ologo}
Aunque no es obligatorio, los documentos XML pueden empezar con unas l\'ineas que describen la versi\'on XML, el tipo de documento y otras cosas.\\

El pr\'ologo contiene:
\begin{itemize}
 \item Una declaraci\'on XML. Es la sentencia que declara al documento como un documento XML.
\item Una declaraci\'on de tipo de documento. Enlaza el documento con su  Schema para el soporte de las etiquetas.
\item Uno o m\'as comentarios e instrucciones de procesamiento.
\end{itemize}

\subsection{Cuerpo}
A diferencia del pr\'ologo, el cuerpo no es opcional en un documento XML, el cuerpo debe contener un y solo un elemento ra\'iz, caracter\'istica indispensable tambi\'en para que el documento est\'e bien formado.

\subsection{Elementos}
Los elementos XML pueden tener contenido (m\'as elementos, caracteres o ambos), o bien ser elementos vac\'ios.

\subsection{Atributos}
Los elementos pueden tener atributos, que son una manera de incorporar caracter\'isticas o propiedades a los elementos de un documento. Deben ir entre comillas.

\subsection{Entidades predefinidas}
Entidades para representar caracteres especiales para que, de esta forma, no sean interpretados como marcado en el procesador XML.

\subsection{Secciones CDATA}
Es una construcci\'on en XML para especificar datos utilizando cualquier car\'acter sin que se interprete como marcado XML. Solo se utiliza en los atributos. Permite que caracteres especiales no rompan la estructura. Ejemplo:

\begin{center}
	\hlkwa{$<!$[CDATA[''contenido especial: \'a\'e\'i\'o\'u\~n\& '']]$>$} 
\end{center}


\subsection{Comentarios}
Comentarios a modo informativo para el programador que han de ser ignorados por el procesador.

Los comentarios en XML tienen el siguiente formato:
\begin{center}
 	\hlkwa{$<!---$ Comentario $--->$}
\end{center}


\section{Validez}
Como se ha expuesto, un documento ''bien formado''  solamente se refiere a su estructura sint\'actica b\'asica, es decir, que se componga de elementos, atributos y comentarios que se especifican en la sintaxis de XML.  La necesidad que existe por validar un documento XML es por que no solo se debe de verificar la sintaxis del documento, si no que tambi\'en la estructura de los elementos presentes, ya que cada aplicaci\'on que utilice estos documentos XML debe de tener definida una estructura determinada.\\

Por ejemplo una aplicaci\'on puede pedir como entrada un documento XML en el cual sea obligatorio llevar el campo Nombre si a esta aplicaci\'on se le proporciona un documento XML sin que especifique este campo, se validara y no tomara este documento aunque sea bien formado por que debe de cumplir con las validaciones que solicita la aplicaci\'on.\\

Esta relaci\'on entre elementos se especifica en un documento externo o definici\'on, expresada como DTD (Document Type Definition) o como XSchema. Crear una definici\'on equivale a crear un nuevo lenguaje de marcado, para una aplicaci\'on espec\'ifica.

\section{Document type definition (DTD)}
La DTD define los tipos de elementos, atributos y entidades permitidas, y puede expresar algunas limitaciones para combinarlos. Los documentos XML que se ajustan a su DTD son denominados v\'alidos.\\

Siglas en ingl\'es de Document Type Definition. La definici\'on de tipo de documento (DTD) es una descripci\'on de estructura y sintaxis de un documento XML o SGML que especifica las restricciones que se deben de cumplir para validar cada uno de los documentos XML. Su funci\'on b\'asica es la descripci\'on del formato de datos, para usar un formato com\'un y mantener la consistencia entre todos los documentos que utilicen la misma DTD. De esta forma, dichos documentos, pueden ser validados, conocen la estructura de los elementos y la descripci\'on de los datos que trae consigo cada documento, y pueden adem\'as compartir la misma descripci\'on y forma de validaci\'on dentro de un grupo de trabajo que usa el mismo tipo de informaci\'on.\\

Una DTD describe:
\begin{itemize}
 \item Elementos: indican qu\'e etiquetas son permitidas y el contenido de dichas etiquetas.
\item Estructura: indica el orden en que van las etiquetas en el documento.
\item Anidamiento: indica qu\'e etiquetas van dentro de otras.

\end{itemize}

\subsection{Ejemplo DTD}
Un ejemplo de una DTD XML muy simple, para describir una lista de personas:

\begin{table}[!htp]
 \noindent
\ttfamily
\hlstd{}\hlline{\ \ \ \ 1\ }\hlkwa{$<$ELEMENT Curricula (curriculum{*})$>$}\hlstd{}\\
\hlline{\ \ \ \ 2\ }\hlkwa{$<$ELEMENT curriculum (datosgenerales,datosparticulares?)$>$}\hlstd{}\\
\hlline{\ \ \ \ 3\ }\hlkwa{$<$ELEMENT datosgenerales (nombre,fechanac)$>$}\hlstd{}\\
\hlline{\ \ \ \ 4\ }\hlkwa{$<$ELEMENT nombre (apellidop,apellidom,nombres)$>$}\hlstd{}\\
\hlline{\ \ \ \ 5\ }\hlkwa{$<$ELEMENT fechanac (dia,mes,anio)$>$}\hlstd{}\\
\hlline{\ \ \ \ 6\ }\hlkwa{$<$ELEMENT datosparticulares (deporte)$>$}\hlstd{}\\
\hlline{\ \ \ \ 7\ }\hlkwa{$<$ELEMENT apellidop (\#PCDATA) $>$}\hlstd{}\\
\hlline{\ \ \ \ 8\ }\hlkwa{$<$ELEMENT apellidom (\#PCDATA) $>$}\hlstd{}\\
\hlline{\ \ \ \ 9\ }\hlkwa{$<$ELEMENT nombres (\#PCDATA) $>$}\hlstd{}\\
\hlline{\ \ \ 10\ }\hlkwa{$<$ELEMENT dia (\#PCDATA) $>$}\hlstd{}\\
\hlline{\ \ \ 11\ }\hlkwa{$<$ELEMENT mes (\#PCDATA) $>$}\hlstd{}\\
\hlline{\ \ \ 12\ }\hlkwa{$<$ELEMENT anio (\#PCDATA) $>$}\hlstd{}\\
\hlline{\ \ \ 13\ }\hlkwa{$<$ELEMENT deporte (\#PCDATA) $>$}\hlstd{}\\
\mbox{}
\normalfont
\caption{Ejemplo DTD para validar documentos XML basados en una curr\'icula.}
\label{DTD}
\end{table}

\begin{table}[!htp]
 \noindent
\ttfamily
\hlstd{}\hlline{\ \ \ \ 1\ }\hlkwa{$<$?xml version=}\hlstr{''1.0''}\hlkwa{ encoding=}\hlstr{''ISO{-}8859{-}1''}\hlkwa{?$>$}\hlstd{}\\
\hlline{\ \ \ \ 2\ }\hlkwa{$<$DOCTYPE curricula SYSTEM }\hlstr{''curricula.dtd''}\hlkwa{$>$}\hlstd{}\\
\hlline{\ \ \ \ 3\ }\hlkwa{$<$Curricula$>$}\hlstd{\\
\hlline{\ \ \ \ 4\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$curriculum$>$}\hlstd{\\
\hlline{\ \ \ \ 5\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$datosgenerales$>$}\hlstd{\\
\hlline{\ \ \ \ 6\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$nombre$>$}\hlstd{\\
\hlline{\ \ \ \ 7\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$apellidop$>$}\hlstd{ Perez }\hlkwa{$<$/apellidop$>$}\hlstd{\\
\hlline{\ \ \ \ 8\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$apellidom$>$}\hlstd{}\hlstd{\ \ \ \ }\hlstd{Hernandez }\hlkwa{$<$/apellidom$>$}\hlstd{\\
\hlline{\ \ \ \ 9\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$nombres$>$}\hlstd{ Juan Carlos }\hlkwa{$<$/nombres$>$}\hlstd{\\
\hlline{\ \ \ 10\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/nombre$>$}\hlstd{\\
\hlline{\ \ \ 11\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$fechanac$>$}\hlstd{\\
\hlline{\ \ \ 12\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$dia$>$}\hlstd{}\hlnum{31}\hlstd{}\hlkwa{$<$/dia$>$}\hlstd{\\
\hlline{\ \ \ 13\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$mes$>$}\hlstd{}\hlnum{01}\hlstd{}\hlkwa{$<$/mes$>$}\hlstd{\\
\hlline{\ \ \ 14\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$anio$>$}\hlstd{}\hlnum{1985}\hlstd{}\hlkwa{$<$/anio$>$}\hlstd{\\
\hlline{\ \ \ 15\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/fechanac$>$}\hlstd{\\
\hlline{\ \ \ 16\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/datosgenerales$>$}\hlstd{\\
\hlline{\ \ \ 17\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$datosparticulares$>$}\hlstd{\\
\hlline{\ \ \ 18\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$deporte$>$}\hlstd{futbol}\hlkwa{$<$/deporte$>$}\hlstd{\\
\hlline{\ \ \ 19\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/datosparticulares$>$}\hlstd{\\
\hlline{\ \ \ 20\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$/curriculum$>$}\hlstd{}\\
\hlline{\ \ \ 21\ }\hlkwa{$<$/Curricula$>$}\hlstd{}\\
\mbox{}
\normalfont
\caption{Ejemplo de documento XML que hace uso del DTD curr\'icula de la figura \ref{DTD}}
\end{table}



\section{XML Schemas (XSD)}
Un Schema es algo similar a un DTD. Define qu\'e elementos puede contener un documento XML, c\'omo est\'an organizados y qu\'e atributos y de qu\'e tipo pueden tener sus elementos.\\

El XML Schema es un lenguaje que nos describe y restringe formalmente la estructura abstracta que debe cumplir un documento de XML. Es una evoluci\'on de un DTD para evitar las deficiencias del DTD y realizar un esquema m\'as abstracto.\\

Algunas de las ventajas de Xschema con respecto a DTD son:
\begin{itemize}
 \item Usan sintaxis de XML, logrando abstraer m\'as la informaci\'on.

\item Permiten especificar los tipos de datos que el documento XML podr\'a utilizar, es decir, en el documento esquema se puede definir el tipo del contenido de un elemento y especificar si debe ser un n\'umero, cadena, texto, fecha, etc.

\item Permiten utilizar diferentes espacios de nombres (namespace) para tener diversas validaciones para no degenerar la estructura del XML a pesar de la manipulaci\'on de diferentes personas.

\item Debido a que su sintaxis esta basada en XML puede ser extensible.

\end{itemize}

\subsection{Componentes}
Los documentos esquema se construyen a partir de diferentes tipos de componentes:

\begin{itemize}
 \item Elemento. (element) Es cada uno de los datos abstractos que entraran en las restricciones del documento XML. Los elementos pueden tener tipos de datos simples; pueden ocurrir m\'as de una vez y/o pueden tener tipos complejos.

\item Atributo. (attribute) Es una manera de incorporara caracter\'isticas o propiedades  a los elementos definidos en un documento esquema.

\item Tipo Simple. (simpleType) Los tipos simples contienen datos, pero no pueden contener atributos o sub-elementos.

\item Tipo Complejo. (complexType) Los tipos complejo permiten incluir sub-elementos y/o atributos y se definen enumerando los elementos incluidos. El contenido de los tipo complejo puede ser:
\begin{itemize}
 \item Contenido Simple (simpleContent) Al igual que el tipo simple este tipo de contenido contiene datos sin embargo no pueden contener atributos o sub-elementos.
\item Contenido Complejo (complexContent) Dentro de los componentes tipo complejo tambi\'en puede haber tipos complejos que almacenen sub-elementos y/o atributos.
\item Secuencia (sequence) Se utiliza dentro de los tipos complejo para almacenar un grupo o secuencia de elementos.

\end{itemize}

\end{itemize}

\subsection{Estructura}
Ejemplo de la estructura de un documento esquema vac\'io:

\begin{table}[!htp]
\noindent
\ttfamily
\hlstd{}\hlline{\ \ \ \ 1\ }\hlkwa{$<$?xml version=}\hlstr{''1.0''}\hlkwa{ encoding=}\hlstr{''ISO{-}8859{-}1''}\hlkwa{?$>$}\hlstd{}\\
\hlline{\ \ \ \ 2\ }\hlkwa{$<$xsd:schema xmlns:xsd=}\hlstr{''http://www.w3.org/2001/XMLSchema''}\hlkwa{ version=}\hlstr{''0.1''}\hlkwa{ xml:lang=}\hlstr{''es''}\hlkwa{$>$}\hlstd{}\\
\hlline{\ \ \ \ 3\ }\hlkwa{$<$/xsd:schema$>$}\hlstd{}\\
\mbox{}
\normalfont
\caption{Ejemplo de estructura de un documento esquema vac\'io}
\label{schema}
\end{table}

Ejemplo de la estructura de un documento esquema:

\begin{table}[!htp]
 \noindent
\ttfamily
\hlstd{}\hlline{\ \ \ \ 1\ }\hlkwa{$<$?xml version=}\hlstr{''1.0''}\hlkwa{ encoding=}\hlstr{''UTF{-}8''}\hlkwa{?$>$}\hlstd{}\\
\hlline{\ \ \ \ 2\ }\hlkwa{$<$xsd:schema xmlns:xsd=}\hlstr{''http://www.w3.org/2001/XMLSchema''}\hlkwa{$>$}\hlstd{\\
\hlline{\ \ \ \ 3\ }}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{$<$xsd:element name=}\hlstr{''Curricula''}\hlkwa{$>$}\hlstd{\\
\hlline{\ \ \ \ 4\ }}\hlstd{\ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:complexType$>$}\hlstd{\\
\hlline{\ \ \ \ 5\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:sequence$>$}\hlstd{\\
\hlline{\ \ \ \ 6\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:element ref=}\hlstr{''Curriculum''}\hlkwa{ maxOccurs= }\hlstr{''1''}\hlkwa{/$>$}\hlstd{\\
\hlline{\ \ \ \ 7\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/xsd:sequence$>$}\hlstd{\\
\hlline{\ \ \ \ 8\ }}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/xsd:complexType$>$}\hlstd{\\
\hlline{\ \ \ \ 9\ }}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{$<$/xsd:element$>$}\hlstd{\\
\hlline{\ \ \ 10\ }\\
\hlline{\ \ \ 11\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:element name=}\hlstr{''Curriculum''}\hlkwa{$>$}\hlstd{\\
\hlline{\ \ \ 12\ }}\hlstd{\ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:complexType$>$}\hlstd{\\
\hlline{\ \ \ 13\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:sequence$>$}\hlstd{\\
\hlline{\ \ \ 14\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:element ref=}\hlstr{''DatosGenerales''}\hlkwa{ maxOccurs= }\hlstr{''1''}\hlkwa{/$>$}\hlstd{\\
\hlline{\ \ \ 15\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/xsd:sequence$>$}\hlstd{\\
\hlline{\ \ \ 16\ }}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/xsd:complexType$>$}\hlstd{\\
\hlline{\ \ \ 17\ }}\hlstd{\ \ \ \ }\hlstd{}\hlkwa{$<$/xsd:element$>$}\hlstd{\\
\hlline{\ \ \ 18\ }\\
\hlline{\ \ \ 19\ }}\hlstd{\ \ \ }\hlstd{}\hlkwa{$<$xsd:element name = }\hlstr{''DatosGenerales''}\hlkwa{$>$}\hlstd{\\
\hlline{\ \ \ 20\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:complexType$>$}\hlstd{\\
\hlline{\ \ \ 21\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:sequence$>$}\hlstd{\\
\hlline{\ \ \ 22\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:element ref=}\hlstr{''Nombre''}\hlkwa{ maxOccurs= }\hlstr{''1''}\hlkwa{/$>$}\hlstd{\\
\hlline{\ \ \ 23\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:sequence$>$}\hlstd{\\
\hlline{\ \ \ 24\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:complexType$>$}\hlstd{\\
\hlline{\ \ \ 25\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$/xsd:element$>$}\hlstd{\\
\hlline{\ \ \ 26\ }\\
\hlline{\ \ \ 27\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:element name = }\hlstr{''Nombre''}\hlkwa{$>$}\hlstd{\\
\hlline{\ \ \ 28\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:complexType$>$}\hlstd{\\
\hlline{\ \ \ 29\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:sequence$>$}\hlstd{\\
\hlline{\ \ \ 30\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:element name = }\hlstr{''apellidop''}\hlkwa{ type = }\hlstr{''xsd:}\\
\hlline{\ \ \ 31\ }\hlstr{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstr{string''}\hlkwa{ maxOccurs = }\hlstr{''1''}\hlkwa{/$>$}\hlstd{\\
\hlline{\ \ \ 32\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:element name = }\hlstr{''apellidom''}\hlkwa{ type = }\hlstr{''xsd:}\\
\hlline{\ \ \ 33\ }\hlstr{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstr{string''}\hlkwa{ maxOccurs = }\hlstr{''1''}\hlkwa{/$>$}\hlstd{\\
\hlline{\ \ \ 34\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:element name = }\hlstr{''nombres''}\hlkwa{ type = }\hlstr{''xsd:string''}\hlkwa{}\\
\hlline{\ \ \ 35\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{maxOccurs = }\hlstr{''1''}\hlstd{/$>$\\
\hlline{\ \ \ 36\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:sequence$>$}\hlstd{\\
\hlline{\ \ \ 37\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$xsd:complexType$>$}\hlstd{\\
\hlline{\ \ \ 38\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$/xsd:element$>$}\hlstd{}\\
\hlline{\ \ \ 39\ }\hlkwa{$<$/xsd:schema$>$}\hlstd{}\\
\mbox{}
\normalfont
\caption{Ejemplo de esquema XML}
\label{EjemploXML}
\end{table}

\subsection{XML namespaces}
Por lo general un documento XML esta creado con el fin de compartir e intercambiar informaci\'on, el problema que puede surgir por el intercambio del mismo documento es que al  manipular el documento se pueden ir definiendo etiquetas, si no se controla la definici\'on de elementos y etiquetas se puede ocasionar un caos al tratar de parsear etiquetas con el mismo nombre pero que tienen diferente significado.\\

Podemos entender mejor el problema con un ejemplo: En la figura 4.1 se muestra un ejemplo de los problemas que puede ocasionar la falta de un namespace. Se puede observar en la figura que existen etiquetas repetidas que tienen diferente significado. Es decir la etiqueta nombre se encuentra definida dos veces, solo que en la primera definici\'on se refiere al nombre de una persona y en la segunda definici\'on se refiere al nombre de una empresa. Lo mismo ocurre con las etiquetas de direcci\'on, calle, numero, colonia, cp. Ya que mientras unas hacen referencia a la direcci\'on de una persona otras se refieren a la direcci\'on de una empresa.\\

Es por esto que la W3C recomienda la utilizaci\'on de espacio de nombres para proporcionar elementos y atributos con nombre \'unico para resolver la ambig\"uedad existente entre elementos y atributos que tengan el mismo nombre.\\

\begin{table}[!htp]
 \noindent
\ttfamily
\hlstd{}\hlline{\ \ \ \ 1\ }\hlkwa{$<$?xml version=}\hlstr{''1.0''}\hlkwa{ encoding=}\hlstr{''ISO{-}8859{-}1''}\hlkwa{?$>$}\hlstd{}\\
\hlline{\ \ \ \ 2\ }\hlkwa{$<$DOCTYPE curricula SYSTEM }\hlstr{''curricula.dtd''}\hlkwa{$>$}\hlstd{}\\
\hlline{\ \ \ \ 3\ }\hlkwa{$<$Curricula$>$}\hlstd{\\
\hlline{\ \ \ \ 4\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$curriculum$>$}\hlstd{\\
\hlline{\ \ \ \ 5\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$datosgenerales$>$}\hlstd{\\
\hlline{\ \ \ \ 6\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$nombre$>$}\hlstd{\\
\hlline{\ \ \ \ 7\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$apellidop$>$}\hlstd{ Perez }\hlkwa{$<$/apellidop$>$}\hlstd{\\
\hlline{\ \ \ \ 8\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$apellidom$>$}\hlstd{}\hlstd{\ \ \ \ }\hlstd{Hernandez }\hlkwa{$<$/apellidom$>$}\hlstd{\\
\hlline{\ \ \ \ 9\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$nombres$>$}\hlstd{ Juan Carlos }\hlkwa{$<$/nombres$>$}\hlstd{\\
\hlline{\ \ \ 10\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/nombre$>$}\hlstd{\\
\hlline{\ \ \ 11\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$direccion$>$}\hlstd{\\
\hlline{\ \ \ 12\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$calle$>$}\hlstd{Fco. Marquez}\hlkwa{$<$/calle$>$}\hlstd{\\
\hlline{\ \ \ 13\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$numero$>$}\hlstd{}\hlnum{44}\hlstd{}\hlkwa{$<$/numero$>$}\hlstd{\\
\hlline{\ \ \ 14\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$colonia$>$}\hlstd{Ni\~nos Heroes}\hlkwa{$<$/colonia$>$}\hlstd{\\
\hlline{\ \ \ 15\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$cp$>$}\hlstd{}\hlnum{54870}\hlstd{}\hlkwa{$<$/cp$>$}\hlstd{\\
\hlline{\ \ \ 16\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/direccion$>$}\hlstd{\\
\hlline{\ \ \ 17\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/datosgenerales$>$}\hlstd{\\
\hlline{\ \ \ 18\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$experienciaLaboral$>$}\hlstd{\\
\hlline{\ \ \ 19\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$empresa$>$}\hlstd{\\
\hlline{\ \ \ 20\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$nombre$>$}\hlstd{\\
\hlline{\ \ \ 21\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{Universidad Autonoma Metropolitana\\
\hlline{\ \ \ 22\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/nombre$>$}\hlstd{\\
\hlline{\ \ \ 23\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$direccion$>$}\hlstd{\\
\hlline{\ \ \ 24\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$calle$>$}\hlstd{Av. San Pablo}\hlkwa{$<$/calle$>$}\hlstd{\\
\hlline{\ \ \ 25\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$numero$>$}\hlstd{}\hlnum{180}\hlstd{}\hlkwa{$<$/numero$>$}\hlstd{\\
\hlline{\ \ \ 26\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$colonia$>$}\hlstd{Reynosa Tamaulipas}\hlkwa{$<$/colonia$>$}\hlstd{\\
\hlline{\ \ \ 27\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$cp$>$}\hlstd{}\hlnum{02200}\hlstd{}\hlkwa{$<$/cp$>$}\hlstd{\\
\hlline{\ \ \ 28\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/direccion$>$}\hlstd{\\
\hlline{\ \ \ 29\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/empresa$>$}\hlstd{\\
\hlline{\ \ \ 30\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/experienciaLaboral$>$}\hlstd{\\
\hlline{\ \ \ 31\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$/curriculum$>$}\hlstd{}\\
\hlline{\ \ \ 32\ }\hlkwa{$<$/Curricula$>$}\hlstd{}\\
\mbox{}
\normalfont
\caption{Ejemplo de problemas que tiene un documento XML sin la utilizaci\'on de namespace}
\end{table}


\subsection{Declaraci\'on de un namespace}
Un espacio de nombres se declara utilizando el atributo reservado de XML xmlns, cuyo valor debe ser un URI (Uniform Resourse Identifier) como por ejemplo:

\begin{table}[!htp]
 \noindent
\ttfamily
\hlstd{}\hlline{\ \ \ \ 1\ }\hlkwa{$<$usr:usuario xmlns:usr='http://mipagina.com/proyecto/Espacio\textunderscore de\textunderscore nombres\textunderscore XML/usuario'}\\
\hlline{\ \ \ \ 2\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{xmlns:emp='http://mipagina.com/proyecto/Espacio\textunderscore de\textunderscore nombres\textunderscore XML/pedido'$>$}\\
\hlline{\ \ \ \ 3\ }\\
\mbox{}
\normalfont
\caption{Ejemplo de la declamaci\'on de un namespace en un documento XML.}
\end{table}

Una vez que se hay declarado el espacio de nombres de XML cada una de las etiquetas definidas en el documento debe de empezar con el prefijo declarado. Cabe destacar que el URI utilizado no es funcional como hiperv\'inculo, ya que solo sirve para el parser de XML, se recomienda utilizar como identificador una URI debido a que es dif\'icil que diferentes personas puedan coincidir en la definici\'on del espacio de nombres.

Una vez definido el espacio de nombres el documento XML puede tener una estructura como la siguiente:

\begin{table}[!htp]
 \noindent
\ttfamily
\hlstd{}\hlline{\ \ \ \ 1\ }\hlkwa{$<$?xml version=}\hlstr{''1.0''}\hlkwa{ encoding=}\hlstr{''ISO{-}8859{-}1''}\hlkwa{?$>$}\hlstd{\\
\hlline{\ \ \ \ 2\ } }\hlkwa{$<$usr:usuario xmlns:usr='http://mipagina.com/proyecto/Espacio\textunderscore de\textunderscore nombres\textunderscore XML/usuario'}\\
\hlline{\ \ \ \ 3\ }\hlstd{}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{xmlns:emp='http://mipagina.com/proyecto/Espacio\textunderscore de\textunderscore nombres\textunderscore XML/pedido'$>$}\\
\hlline{\ \ \ \ 4\ }\hlkwa{$<$Curricula$>$}\hlstd{\\
\hlline{\ \ \ \ 5\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$curriculum$>$}\hlstd{\\
\hlline{\ \ \ \ 6\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$usr:datosgenerales$>$}\hlstd{\\
\hlline{\ \ \ \ 7\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$usr:nombre$>$}\hlstd{\\
\hlline{\ \ \ \ 8\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$usr:apellidop$>$}\hlstd{ Perez }\hlkwa{$<$/apellidop$>$}\hlstd{\\
\hlline{\ \ \ \ 9\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$usr:apellidom$>$}\hlstd{}\hlstd{\ \ \ \ \ }\hlstd{Hernandez }\hlkwa{$<$/apellidom$>$}\hlstd{\\
\hlline{\ \ \ 10\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$usr:nombres$>$}\hlstd{ Juan Carlos }\hlkwa{$<$/nombres$>$}\hlstd{\\
\hlline{\ \ \ 11\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/usr:nombre$>$}\hlstd{\\
\hlline{\ \ \ 12\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$usr:direccion$>$}\hlstd{\\
\hlline{\ \ \ 13\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$usr:calle$>$}\hlstd{Fco. Marquez}\hlkwa{$<$/calle$>$}\hlstd{\\
\hlline{\ \ \ 14\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$usr:numero$>$}\hlstd{}\hlnum{44}\hlstd{}\hlkwa{$<$/numero$>$}\hlstd{\\
\hlline{\ \ \ 15\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$usr:colonia$>$}\hlstd{Ni\~nos Heroes}\hlkwa{$<$/colonia$>$}\hlstd{\\
\hlline{\ \ \ 16\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$usr:cp$>$}\hlstd{}\hlnum{54870}\hlstd{}\hlkwa{$<$/cp$>$}\hlstd{\\
\hlline{\ \ \ 17\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/usr:direccion$>$}\hlstd{\\
\hlline{\ \ \ 18\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/usr:datosgenerales$>$}\hlstd{\\
\hlline{\ \ \ 19\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$emp:experienciaLaboral$>$}\hlstd{\\
\hlline{\ \ \ 20\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$emp:empresa$>$}\hlstd{\\
\hlline{\ \ \ 21\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$emp:nombre$>$}\hlstd{\\
\hlline{\ \ \ 22\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{Universidad Autonoma Metropolitana\\
\hlline{\ \ \ 23\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/emp:nombre$>$}\hlstd{\\
\hlline{\ \ \ 24\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$emp:direccion$>$}\hlstd{\\
\hlline{\ \ \ 25\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$emp:calle$>$}\hlstd{Av. San Pablo}\hlkwa{$<$/emp:calle$>$}\hlstd{\\
\hlline{\ \ \ 26\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$emp:numero$>$}\hlstd{}\hlnum{180}\hlstd{}\hlkwa{$<$/emp:numero$>$}\hlstd{\\
\hlline{\ \ \ 27\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$emp:colonia$>$}\hlstd{Reynosa Tamaulipas}\hlkwa{$<$/emp:colonia$>$}\hlstd{\\
\hlline{\ \ \ 28\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$emp:cp$>$}\hlstd{}\hlnum{02200}\hlstd{}\hlkwa{$<$/emp:cp$>$}\hlstd{\\
\hlline{\ \ \ 29\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/emp:direccion$>$}\hlstd{\\
\hlline{\ \ \ 30\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/emp:empresa$>$}\hlstd{\\
\hlline{\ \ \ 31\ }}\hlstd{\ \ \ \ \ \ \ \ \ \ }\hlstd{}\hlkwa{$<$/emp:experienciaLaboral$>$}\hlstd{\\
\hlline{\ \ \ 32\ }}\hlstd{\ \ \ \ \ }\hlstd{}\hlkwa{$<$/curriculum$>$}\hlstd{\\
\hlline{\ \ \ 33\ } }\hlkwa{$<$/Curricula$>$}\hlstd{}\\
\mbox{}
\normalfont
\caption{Ejemplo de utilizaci\'on de un namespace en XML}
\end{table}

\section{Ventajas de los Schemas frente a los DTDs}
Usan sintaxis de XML, al contrario que los DTDs, permiten especificar los tipos de datos y son extensibles.

